package com.ruoyi.wms.mapper;

import java.util.List;
import java.math.BigDecimal;
import org.apache.ibatis.annotations.Param;
import com.ruoyi.wms.domain.WmsOutboundOrderDetail;

/**
 * 出库单明细Mapper接口
 * 
 * @author ruoyi
 * @date 2024-01-01
 */
public interface WmsOutboundOrderDetailMapper 
{
    /**
     * 查询出库单明细
     * 
     * @param detailId 出库单明细主键
     * @return 出库单明细
     */
    public WmsOutboundOrderDetail selectWmsOutboundOrderDetailById(Long detailId);

    /**
     * 查询出库单明细列表
     * 
     * @param wmsOutboundOrderDetail 出库单明细
     * @return 出库单明细集合
     */
    public List<WmsOutboundOrderDetail> selectWmsOutboundOrderDetailList(WmsOutboundOrderDetail wmsOutboundOrderDetail);

    /**
     * 根据出库单ID查询明细列表
     * 
     * @param orderId 出库单ID
     * @return 出库单明细集合
     */
    public List<WmsOutboundOrderDetail> selectWmsOutboundOrderDetailByOrderId(Long orderId);

    /**
     * 新增出库单明细
     * 
     * @param wmsOutboundOrderDetail 出库单明细
     * @return 结果
     */
    public int insertWmsOutboundOrderDetail(WmsOutboundOrderDetail wmsOutboundOrderDetail);

    /**
     * 修改出库单明细
     * 
     * @param wmsOutboundOrderDetail 出库单明细
     * @return 结果
     */
    public int updateWmsOutboundOrderDetail(WmsOutboundOrderDetail wmsOutboundOrderDetail);

    /**
     * 删除出库单明细
     * 
     * @param detailId 出库单明细主键
     * @return 结果
     */
    public int deleteWmsOutboundOrderDetailById(Long detailId);

    /**
     * 批量删除出库单明细
     * 
     * @param detailIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteWmsOutboundOrderDetailByIds(Long[] detailIds);

    /**
     * 根据出库单ID删除明细
     * 
     * @param orderId 出库单ID
     * @return 结果
     */
    public int deleteWmsOutboundOrderDetailByOrderId(Long orderId);

    /**
     * 批量新增出库单明细
     * 
     * @param detailList 出库单明细列表
     * @return 结果
     */
    public int batchInsertWmsOutboundOrderDetail(@Param("list") List<WmsOutboundOrderDetail> detailList);

    /**
     * 更新明细已分配数量
     * 
     * @param detailId 明细ID
     * @param allocatedQty 已分配数量
     * @param updateBy 更新人
     * @return 结果
     */
    public int updateAllocatedQty(@Param("detailId") Long detailId, @Param("allocatedQty") BigDecimal allocatedQty, @Param("updateBy") String updateBy);

    /**
     * 更新明细已拣货数量
     * 
     * @param detailId 明细ID
     * @param pickedQty 已拣货数量
     * @param updateBy 更新人
     * @return 结果
     */
    public int updatePickedQty(@Param("detailId") Long detailId, @Param("pickedQty") BigDecimal pickedQty, @Param("updateBy") String updateBy);

    /**
     * 更新明细已出库数量
     * 
     * @param detailId 明细ID
     * @param shippedQty 已出库数量
     * @param updateBy 更新人
     * @return 结果
     */
    public int updateShippedQty(@Param("detailId") Long detailId, @Param("shippedQty") BigDecimal shippedQty, @Param("updateBy") String updateBy);

    /**
     * 更新明细状态
     * 
     * @param detailId 明细ID
     * @param detailStatus 明细状态
     * @param updateBy 更新人
     * @return 结果
     */
    public int updateDetailStatus(@Param("detailId") Long detailId, @Param("detailStatus") String detailStatus, @Param("updateBy") String updateBy);
}